其他
关于硬件工程师的真相:这行真的不行吗,敢问路在何方?
硬件工程师,曾经有多少人希望从事的职业?在别人眼里好像能够从事硬件设计需要你了解很多东西,可以从事这个职业之后才逐渐发现,硬件工程师处在一种非常难受的困境当中!想来造成这种情况可能主要有多方面的原因,一个很重要的原因是现在设计分工越来越细,每一个人接触的事情越来越少,但是技术却没有随之加深,以前硬件工程师可能做很多事情,包括前期的方案设计、选型、画原理图、画PCB,板子做完之后回来调试,还要写驱动程序,有的时候还会写一些上层的测试程序,如果单板中存在逻辑器件还能够写写逻辑,但是随着分工的加剧,现在的方案由系统设计工程师给搞定,就连器件选型也不用自己管,别人选好之后,自己只需要仔细根据datasheet来照着设计,更多的时候芯片供应商还提供参考设计,只要照着葫芦画瓢就可以了,原理图的设计也不是自己全部负责,电源有专门的电源工程师负责,一些具体的技术也会有专门的工程师来负责,最后才发现自己只是在原理图上面连连线而言,现在大家戏称自己为连线工程师!!画完原理图之后单板也不会自己去画,而是有专门的EDA设计工程师来帮助你画,你只要告诉别人应该注意什么,但是往往会出现沟通上面的困难,你不会操作PCB的设计软件或者说操作不熟练,别人又不明白你需要的设计规则,到最后发现设计出来的PCB总是存在缺陷。
不管怎么的板子总算加工回来了,自己找器件送来外面加工焊接,原来或许自己就直接开始动手焊接了,现在压根不需要了有专门的焊工来帮助你焊接。单板焊接完成之后就是调试了,这个环节或许是自己能够操作最多的环节了,但是因为前面设计的时候很多人参与设计,参与检查,大部分的时候也就是发现一些粗心大意的错误,而过深层次的错误也不少那么简单能够发现的,因为很多东西不是自己设计的,等单板调试结束之后开始测试,这个环节是很多硬件工程师比较讨厌的事情,因为这边的测试是一个很无聊的环节,虽然它很重要,可是耗散的不管是经历还有很多其他的东西。
整个单板调试结束之后就开始进行各种可靠性测试,可是这个时候只要硬件工程师搭建一下环境,然后有EMC工程师、热设计工程师等来进行测试,获取数据,然后分析,如果有问题那么需要硬件工程师来修正,最后开始重复上面的流程。
硬件工程师在整个设计过程中最大的工作量在于文档的编写和流程的沟通,其它主要体现工作量的地方就是画原理图和调试了,但是这两个环节却没有体现多少的技术含量,硬件的工程师总是感慨自己懂得东西越来越少了,或者自己已经转变成了“连线工程师”!
请问硬件工程师你真的转变成了连线工程师吗?你的未来何在?!
软件代码也是人编写的,我们所熟知的语言比如C、C++等都是通过编译器翻译成汇编语言,然后汇编语言通过汇编器翻译成二进制机器语言,机器语言操控门电路完成相应的动作。个人觉得,没有硬件,软件就没有存在的意义,硬件是一切的基础,这里可以看出硬件设计是多重要。
但软件和硬件又有明显的区分,至少工作内容区别很大。按照行业内描述硬件属于底层(一般称为底层硬件),软件称为上层(软件又分为:底层驱动、上层业务以及应用层等)。如果非要举个例子来说明软件和硬件, 那最好的例子就是人,硬件指人的躯体,而软件指人的思维。
其实对于非电子领域的人,很难想明白计算机是怎么工作的,硬件是怎样工作的,软件是怎样工作的,即使你知道都是0和1,但你没做过相关工作,你发现不了其中的神奇之处。其实你只要知道,软件驱动硬件工作,驱动的激励是什么?是电讯号!硬件接收到的这个电讯号分为0和1,硬件的响应速度非常快,多快呢?举个例子,硬件中常用的串口波特率115200bit per second,一秒钟115200个0或者1,英语字母是8个bit(可在ASCII表看到,这在大学都学过),那就是一秒钟可打印14400个字母。你眨下眼睛一万多个字母就出来了。当然实际上并没有这么多,这只是个形象的例子。
但在电路设计上100kHz属于比较慢的速率了。再比如显示器一幅图的刷新频率在一秒钟24个以上,我们人眼就看不出来。24帧的数据是非常大的,比如1080p30格式输出,总的数据量是一秒钟1920*1080*12*30= 746496000个0或者1,也就是7亿个0或者1。
二
什么是硬件设计?
一般来说硬件设计指的是电路设计,这样说是没问题的,因为你所有的工作都是围绕电路设计,最终的目标也是产出一个优秀的电路,能够满足各种要求,经历各种考验。但实际上我们要求的是产品,而不是单板。
网上有一篇文章讲的挺好:"硬件设计就是根据产品经理的需求PRS(Product Requirement Specification),在COGS(Cost of Goods Sale)的要求下,利用目前业界成熟的芯片方案或者技术,在规定时间内完成符合:
PRS功能(Function)
等上述要求的硬件产品(注意:是产品不是开发板)。可以看到,一个成功的硬件设计,主要功能的实现只是所有环节中的一小部分。刚开始工作的时候,觉得板子电路设计完就完成了50%工作,PCB回板主要功能都能实现了,那就完成了80%的工作。实际上不是的,PCB回板主要功能都实现了,连30%工作都没有。所以不管是时间上,还是阶段上,产品的硬件设计时一个漫长过程。
而且你在一个公司做产品硬件设计,一般情况下都是参考成熟的方案,主芯片CPU主要功能的实现最终还是依靠芯片厂商提供的套片方案,一般来说为了降低风险,主要是参考套片方案的参考设计完成,芯片厂商也会提供包括器件封装,参考设计,仿真模型,PCB参考等等全部资料,在芯片功能越来越复杂的今天,一个片子动不动就几百上千个PIN,对于一个新项目来说,是没有时间一页页去吃透每个PIN,每个输入输出的具体功能,电气参数的,尤其是对于高速设计,比如DDR3接口,XAUI接口等等。一般来说芯片厂商提供的参考设计就是他们经过开发,验证,测试的最佳方案了,很多情况就是你必须按照参考设计来做,否则硬件可能就有问题,一般来说就是信号完整性问题或者EMC问题。"
那有的人就说了,硬件电路设计谈不上设计,都是copy成熟电路。芯片厂商提供越来越周到的服务,再加上公司沉淀的技术积累,硬件设计工程师可以完全不动脑子进行电路设计。看起来硬件工程师HWE(Hardware Engineer)的价值越来越低了,毕竟一个产品的核心功能或者技术一般都在IC或者FPGA里面了,HWE一般没有能力进行核心逻辑设计IC design。那如果按照这个逻辑软件设计也谈不上设计,都是copy成熟代码。试问有几个软件开发人员不移植别人的代码?再深入点,有几个软件工程师能随意更改uboot、kernel,不百度C语言语法,不移植业务程序,不去问芯片厂商的技术支持?
即使都是成熟的东西,实际上工作过程中我并没有发现哪个项目做得很快,同样一套电路和代码,成熟产品没问题,新产品为什么就有问题??最后还是是硬件设计去解决。
对于这上述问题,我也曾经困惑过,总是感觉硬件设计没有什么好搞的了,不就是抄抄参考设计,就跟组装一台电脑一样组装一个单板嘛。当然随着项目经验的增多,尤其从事现在硬件系统级设计的角色,感觉原来自己考虑更多是从一名原理图设计工程师的角度考虑问题,看问题总是很片面。就像开始说的,一个成功的硬件设计,功能Function只是一小部分,至于其他的因素和能力,一个HWE的能力取决于能考虑因素越多,越深入,就越是一个优秀的HWE工程师。
所以HWE是吃经验的,对公司来说培养一个HWE成本很高,硬件不会像软件一样代码错了修改一下几分钟就可以搞定,硬件设计错了,那有可能全部都要重来,整个项目周期可能就要延迟3周甚至一个月以上。比如最近遇到的SENSOR出图像,效果不好,亮坏点比较多,硬件电路这边没法跳线,这和布局布线有关,只有改板。
有个观点需要说明一下,啥都不懂也可以做出事情,但对个人来说会有发展天花板。硬件方面就像参考电路一样,你不知道电路怎么工作的也能把他用起来,软件方面就像uboot和kernel一样你看不懂也能用起来,但一旦你懂,那就不一样了。就像一谈到硬件设计,大家都认为是电路设计,好简单,没什么难度,但实际上不是的,越到底层越难,责任越大,部门交流越多。懂得越多,学的越容易,就能够走的越远。
三
什么是硬件电路设计?
顾名思义,硬件电路设计就是设计电路的,能够熟练使用cadence绘制电路与查看PCB。硬件设计中的电路设计是HWE最重要的职责。电路设计考验的是HWE的设计基本功,即对一些硬件器件的理解以及灵活应用,比如:
CPU
因为本人是EMC专业毕业,所以对设计时考虑的东西深有感触,我们上述讨论的硬件设计的13条东西都应该在设计时候考虑,目前大公司的各种流程保证了设计时各部门的联动,还是很好的。
每个公司都会有自己的硬件电路设计规范,这个需要自己好好去看一下,并用在实践中。硬件电路设计主要针对电路设计,里面涉及的东西比较多,对电路模块的设计后面会有单独的章节讨论。硬件电路设计需要足够的经验与理论知识。
四
硬件设计开发流程
硬件部门开发流程指定后,需要硬件部门人员严格按照开发流程完成开发工作。硬件部开发流程主要分为如下几个步骤
1) 市场调研
2) 立项
3) 硬件总体设计
4) 核心器件的实验及分模块的详细设计
5) 电路、程序及外壳设计
6) 系统联调
7) 内部审核、项目验收
五
什么是硬件工程师?
硬件工程师负责整个产品的硬件设计。
5.1.硬件工程师的职责
首先看下
大公司的研发分工如下图所示,可以看到自己所处的部门与位置。
公司内的所有岗位都同等重要的。
虽然各团队的重要性一致的,但研发团队在产品开发中的位置应该更加核心。研发人员可以转去做市场、测试、供应链或者质量管理等,但市场等岗位的人却很难转做研发。一来研发门槛高,二来研发工作接触面广。而在整个研发团队中,硬件工程师做主导作用。
一般情况下我们所说的研发不仅仅局限于软件硬件,而是整个项目组,这里包括基本上所有部门的产品负责人。
而硬件工程师在研发团队中是重要的一员,硬件产品的研发团队可以如下图所示:
当然上图中所展示的并不完全,比如热设计也是非常重要的一员。但需要说明的是,在整个项目研发团队中,有两个人和所有人打交道,一个就是项目经理,另一个就是硬件工程师。硬件工程师需要和各种研发人员打交道 、协调工作,这也要求硬件工程师具有丰富的知识面和强大的协调能力。
硬件工程师的本职工作,如下图所示:
硬件工程师可以大致分为如下四个阶段:
初级硬件工程师
普通的硬件工程师
资深的硬件工程师
专家级硬件工程师
5.2.时间点把握
作为一个硬件工程师,负责整个产品的研发过程。所以必须对每个时间段进行精确把握。项目都会有项目周期,虽然项目经理在把控时间,但具体的操作还是硬件工程师来搞。因为本人只是处于阶段三,对阶段二、一没什么时间概念,对于正常进度的项目来说:
原理图和详细设计方案:5周,包括参考设计以及原理图评审。
PCB布板布线:4周,包括配合结构、PCB进行电路调整或者器件重新选型。
发板及等待回板:2周,这两周是最闲的,发板同时必须完成BOM上传,这个不能忘。多看自己的图!
回板检查:1周,将自己的板子跑起来,能烧录uboot,网口能ping通。检查有无焊接问题。联系结构进行机器组装,查看结构有没有问题。
驱动调试:5周,配合完成所有底层功能的调试。
媒体版本:2周,这个是驱动调试之后第一个整机跑起来的版本,准备拿给测试进行测试。
信号测试:3周,配合信号测试人员完成信号测试。同时给做业务研发人员准备板子给他们研发。
功能测试:2周,配合功能测试人员完成环境测试,防护静电浪涌测试,以及其他
功能测试,EMC测试等。
解BUG等待:2周,解决上述出现的所有BUG!
改板与发板:2周。
具体时间会随着产品的复杂程度而变化,上述只是本人了解的大致时间=,不能一概而论。
5.3.硬件工程师的本质工作
目标:产品零缺陷
5.4. 硬件工程师基本素质与技术
这里给出华为硬件工程师手册中的定位,看起来还是不错的。
六
硬件工程师需具备什么样的性格?
沟通能力 要有逻辑,想法要全面点,这样才能与其他部门人员好好沟通,说不清会导致吵架!!
性格温和 因为你会和所有部门交流,不要拉着脸,也不要命令式的,性格偏激会导致吵架!!
谦虚谨慎 别人的意见即使不采纳也要倾听,然后说出自己的见解与原因,一意孤行会导致吵架!!
认真仔细 设计电路要认真仔细,解BUG要认真仔细,因为一旦出问题这个责任只有自己背!!
要有耐心 不论是沟通还是解BUG还是检查电路,一定要有耐心!
不会就问 不会的东西就问,因为产品开发时间比较短,不可能给你大把时间去研究!!
有责任心 对电路负责,对产品负责,对BUG负责!!
分清主次 出了问题要先想怎样去解决问题,而不是先去追究谁的责任!!
乐善好学 善于帮助别人,善于学习,必须有扎实的经验知识与理论知识!!!
硬件工程师遇到的困惑
在刚刚开始的时候我是做单片机的,对于整体化设计很感兴趣。所以,大部分的项目中软件、硬件,甚至结构都是我自己操刀。
其实核心不是实际的细节,硬件电路板的细节你可以找各种专业的专门的人去完成,而你更应该专注的是整体。
最开始你会因为电平匹配的问题、信号频率问题大伤脑筋,但是当你做过五个、十个项目以后,只要你善于总结你就会发现最重要的其实是整体设计。
硬件需要不断地充实自己,不断学习、完善,因为硬件工程师需要的只是纷繁复杂。
八
实例讲解
1.技术上学习
以做蓝牙为例: 你需要知道天线的设计,你需要知道馈线的设计,最后到阻抗匹配、矢量分析仪的使用。所有的每一个分支、天线设计、射频电子线路、仪器仪表的使用都是一个可以学习很久的领域,甚至一辈子都学不完。
蓝牙又分为硬件部分,软件部分。而软件部分又分为协议栈、os部分以及驱动等,这些都是我们需要不断地扩展充实的。作为一个硬件工程师,你需要不断的扩展自己的视野,了解整个完整的体系,沟通各个方面的工程师以让自己更清楚产品的整体。
cost down永远是公司一直希望的!我们需要降低成本,每一个器件的选型、种类、成本、周期、渠道,我们都要熟悉。了解市场的动态,如别人家用的是什么,为什么。如何突破自己的产品,提高性价比,甚至像当年的苹果一样出众。
硬件工程师永远面临的是:产线的问题要找你,物料供应的事情要找你,产品返修要找你,现场维护要找你,这些都是提升的机会。那么问题来了,要用科学的方法做事情,多学习质量管理,可靠性设计的知识。
在生产的时候需要注意许多焊接问题,如炉温导致的虚焊,x-ray如何查看bga的焊接状况等,这些都是我们需要知道的。
技术部分也分行业,如视频、音频上的编解码、传输格式(bt1120 h323)等。
九
整体分析
一个产品的设计,首先是要从市场的角度考虑:受众群体、解决痛点、广告宣传方式、解决的痛点,我们用料稳定性要更强,着重考虑逻辑和结构材料。在广告宣传上,我们会更考虑突出的外表特点,于是我们对于产品的基本思路产生了。
1 规划设计、产品功能以及完善细节
我们需要根据产品经理的想法互相沟通,不断地产出新的创新型的idea,让自己的产品功能性更强,细节性更好,这样我们就对于大框的产品有了一个基础的认识。
2 功能实现
这个时候我们需要找到原厂、供应商去了解芯片,选择合适的芯片。
3 原理图
这个阶段是时间花费最多的,如果是新做一个产品,大部分时间都需要阅读文档,熟悉芯片。
在原理图设计的时候我们经常遇到的问题:Input Capacitance 上拉、下拉功能,兼容性、功耗、电源供电、阻抗匹配、抖动、拉高的时间、IO电平、散热、控制逻辑统一芯片、调试口、功能的扩展性、各个时钟(重点关注主时钟和位时钟) 最大最小电平等。
4 PCB 设计
这是一个经验积累的工作,在一个有经验的工程师的带领下你会迅速学会很多绘制PCB的技巧。但是你想知道为什么,对不起,要多看看你的理论知识扎不扎实了,理论越扎实触类旁通的能力的就越好。
PCB设计时候经常遇到的问题:线宽、铺地、铜厚、封装等问题,还有装配失败、距离板边过近、阻抗控制、差分对组间等长(及组内等长)、检测不完整、出光绘等。
这个首先是对linux 框架的理解,或者相关的os ucos freertos 。甚至裸跑对于单片机本身总线 arm架构的理解,写出相应的符合架构的框架(待补充)
6 应用层 业务层逻辑
这个地方我做的基本比较简单,这地方总会有写xswl的问题出现,甚至整个人崩溃掉。
需要注意的主要有变量类型 溢出 逻辑if else 冗余等,以兼容不同硬件性能的提升。
7 测试
这部分会遇到仪器的使用,还有一些认证 、跌落测试、浪涌、静电、工频干扰等等。
十
硬件工程师现状?
水木社区几位工程师最近对“硬件工程师的技术现状”表达了一些自己的观点。
@feiy : "许多硬件工程师都不知道‘电源完整性’是什么。"
“很多硬件工程师就是这种现状,深入研究就不行了”。
硬件门坎真的高吗?
@ commandosren: "因为很多产品并没有很高的速率,要求特别严格的SI PI,更没PDN什么事,比如一些小的电器啊智能硬件的控制板,基本上连通就行,根本用不到什么规则。做这些板子的人做十年他也还是那个水平,但人家产品也没问题。都说软件门坎低,其实硬件门坎也不高。"
比较扎心的就是一位朋友说:“就算你精通电源完整性,工资能比别人高多少呢?”
2. 趋势,只是“技术无用论”的借口?
观点一:硬件工程师要看趋势,“吃苦钻研”并一定合适
单纯的硬件工程师有什么前途?
观点二:“没有过硬的能力,机会给你了你也接不住啊,平台给你了你也依然只是螺丝钉啊。”
不过,硬件能力马马虎虎的各位,你确定自己就一定能成为BAT们抢着要的“AI博士”吗?
关于“青春饭”与“越老越吃香”
以前在研究所的时候,一些老工程师不断的返聘,一些现场的疑难杂症,年轻人束手无策的时候,老教授一出马,药到病除。
若干年前,还有人会说:“程序员是吃青春饭,做硬件好,做硬件越老越吃香”。
硬件工程师已经不再是越老越吃香了?也变成吃青春饭了?
“为什么会有青春饭一说?”年轻工程师的优势往往在于:愿意接受新鲜事物,学习速度快,体力和精力比较旺盛。家庭的负担相对轻一些。
作家格拉德威尔在《异类》一书中指出:“人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成超凡的必要条件”。他将此称为“一万小时定律”。要成为某个领域的专家,需要10000小时,按比例计算就是:如果每天工作八个小时,一周工作五天,那么成为一个领域的专家至少需要五年。这就是一万小时定律。
【硬件技术的入门门槛确实在降低】
首先,由于工具的发达、芯片的进步,特别是数字电路的发展,软件的功能强大,端管云架构的逐步成为现实——硬件技术的入门门槛确实在降低。
芯片发展到最后,会不会出现:芯片加连线到接口,完成设计。不得而知。
端管云架构逐步实现:
对于智能硬件的开发来说,最大的问题在于将产品接入云,并与软件、硬件完美兼容 。云计算是实现物联网的技术核心,作为在智能硬件开发中的重要工具,云端可以实现可靠地传输、储存和备份,保证后台的可管可控。
运行良好的云端可以降低整个产品的运营成本,提供与用户接触的入口,增加了解用户需求的机会,进而不断完善产品。 从某种意义上说,只有包含了云接入的设备,才是真正适合当下市场发展的优秀产品。
把计算和存储都放置在云端,云端实现服务器的归一化,其实是对云端硬件设计要求的降低;同时在通信领域的全IP化的实现,“端”归一化程度也非常的高,接口的种类、数量都在减少;终端主要是传感器的采集和界面的呈现,并且随着MEMS的发展,传感器的模拟电路开发的工作量也越来越少。
十二
敢问路在何方
如果“硬件就是连连线”,岂不是不需要一些经验和积累就可以做出硬件产品了?
未来随着中国人口红利的消退,人力成本优势的消失,现在的SMT、PCB加工很可能从中国消失,跟欧美一样没有相关的低附加值的产品生产,而需要去类似于印度、越南等还具备人力成本优势的区域去加工生产。
软硬结合,成为综合性人才
多知识的结构效率大于单一知识运行效率。人的知识体系结构跟企业的结构一样,效率大于运营效率。
知识也是如此,我们光从软件的角度来说,软件解决成本低,忽略了在这种情况下,硬件成本;反之亦然。软硬件结合,能从技术角度角度寻找到全局成本最低点。项目中,软件可以用IO口模拟出一些接口,SPI主、I2C主、I2C从、UART从、UART主。有时候,单片机没有这些接口,又不能及时换方案的前提下,软件可以降低硬件开发成本;对于一些模拟信号的滤波,经过ADC变成数字信号。既可以采用模拟滤波器滤波,也可以采用数字滤波器滤波。两者可以结合结合,硬件不用更多的器件,软件也不用更高的计算量。不然,上算力更高的芯片,带来的改动不是一点点。软硬工程师都很伤。
在嵌入式方面成为软硬结合的工程师,甚至包括懂结构设计、ID设计、网站设计、射频;成为一个综合性的人才,更有可能成为极客,你只需要一个idea,就可以动手去实践,去改变世界。同时,全栈工程师也可以走向工程、做系统集成。
这是由于硬件工程师的知识体系相对更完善,去理解其他领域的工作更容易决定的。
华为硬件工程师任职资格对照表(表格来源《百度文库》)
总结
关于硬件工程师在不同类型公司中的思考:
很多硬件工程师会觉得自己的工作不是核心,没有像软件工程师一样备受重视,其实我们这个思考源于在硬件行业的不同趋势以及方向。我们首先看通信行业,类似华为的通信设计核心是通信协议,而完成通信协议的芯片,对于硬件工程师来说需要解决的有如下几个部分:
1.了解芯片内部 FPGA CPLD 触发器类别,以及核心的编解码系统的设计完善
只有这样一步步走下去,在这个方面不算深入的我们才会渐渐的变为专家,从而从事深层次的相关领域,实际上一个射频就够你吃一辈子的了。
-END-
推荐阅读
【01】硬件工程师 VS 软件工程师:我学得这么难,为什么薪水没你多?【02】搞嵌入式硬件开发,工程师都有哪些独门绝学?【03】解读:谈谈硬件/软件/固件的区别【04】硬件工程师到底该如何发展?【05】硬件电路工程师最全入门工作指南!